'''
\w: #通用字符、代表任意一个字符（字母、数字、下划线;abc=\w\w\w）
\s: #任意一个空白字符
\d: #任意一个十进制数
\W: #任意一个除了字母、数字、下划线外的一个字符
\D: #任意一个除了十进制外的任何字符
\S: #除了空白字符以外的任何字符
.: #元字符 代表除了任意字符
^: #元字符 代表字符串的开始位置
$: #元字符 代表字符串中的结束位置
*: #元字符 代表0次，一次，多次前面的原子. s*=s||ss||sss||....
?: #元字符 代表0次、一次前面的原子. s?=s||ss
+: #元字符 代表1次、多次前面的原子. s+=ss||sss||.....
{n}: #元字符 代表前面的原子重复n次. s{8}=sssssssss(九个s)
{n,}: #代表前面的原子至少出现n次
{n,m}: #代表前面的原子出现次数暂n到m之间，双闭区间
t|s: #代表t或s
(): #提取某一个内容
I:# 模式修正符 代表忽略字符串中的大小写
M:# 模式修正符 代表多行匹配
L:# 模式修正符 L本地化识别匹配
U:# 模式修正符 根据unicode修改
S:#  模式修正符 让.匹配换行
'''
import re

pat = "yue"  # 规则，普通字符作为原子
string = "http://yum.iqianyue.com"  # 要搜索的字符串
result1 = re.search(pat, string)  # 匹配尝试，没有匹配内容会出现none,
print(f"log10001：{result1}")  # 输出结果中 match中的值为字符串中匹配到的结果
result2 = re.search(pat, "abccbaaa")
print(f"log10002：{result2}")

# 非打印字符作为原子
pat2 = "\n"
string2 = """dfadfkadjfdkasfkdsfkdfkd
 kfjkadfkdkfkadfjdaskfdkf"""
result3 = re.search(pat2, string2)
print(f"log10003:{result3}")

# 未知字符作为原子
pat3 = "\w\dpython\w"  # \d：十进制数，\w:    \s:
string3v = "asdfdfdsaf9pythonadfadfad"
result4 = re.search(pat3, string3v)
print(f"log10004：{result4}")

# 已知字符作为原子,匹配其中一个字符
pat4 = "pyth[syo]n"
string = "fjkafdkafjkdpython"
result = re.search(pat4, string)  # []中不管有多少字符，最终只能匹配一个，
print(f"log10005：{result}")

string = "fjkafdkafjkdpythsyon"  # 这个pytho和n之间有三个字符，就匹配不到
result = re.search(pat, string)
print(f"log10006：{result}")

# 元字符的使用
pat = ".python...."
string = "fkafkafadspythonflafldjf"
result = re.search(pat, string)
print(f"log10007：{result}")

pat = "python|java"
string = "afkafdfkpythondfadfadjavafda"
result = re.search(pat, string)
print(f"log10008:{result}")

# 模式修正符的使用
pat = "python"
string = "ajfkadfjasdfjkdsPythonjfdakjfkdfjkd"
result = re.search(pat, string)  # python区分大小写，匹配将没有结果
print(f"log10009:{result}")

result = re.search(pat, string, re.I)  # 匹配时模式修正符（re.I：不区分大小写）的使用
print(f"log100010:{result}")

# 贪婪模式和懒惰模式匹配
pat = "p.*y"  # 贪婪模式 中间字符和字符个数不确定
pat1 = "p.*?y"  # 懒惰模式 中间字符和字符个数不确定
string = "afkafapythondfafkdfpydfkafk"
result = re.search(pat, string)
print(f"log100011:{result}")
result = re.search(pat1, string)
print(f"log100012:{result}")

result = re.match(pat, string)
print(f"log100013:{result}")  # 从头开始搜索,头部不符合直接none

string = "pafkafapythondfafkdfpydfkafk"
result = re.match(pat, string)
print(f"log100014:{result}")

# 全局搜索函数 re.compile()
result = re.compile(pat1).findall(string)
print(f"log100015:{result}")

# 常见正则表达式实例
pat = "[a-zA-Z]+://[^\s]*[.com|.cn]"  # 匹配域名
string = "<a herf='http://www.baidu.com'>fadfadfdf</a>"
result = re.compile(pat).findall(string)
print(f"log100016:{result}")

# 问题1：匹配电话号码
